home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
APC & TCP 4
/
APC & TCP 4.iso
/
games
/
publicdomain
/
a
/
attacks
/
sources
/
input.mod
< prev
next >
Wrap
Text File
|
1994-05-14
|
24KB
|
622 lines
IMPLEMENTATION MODULE input;
(*$R-*) (* range checking OFF *)
(* This module deals with all the input of the program, Ataxx. It must *)
(* be linked with the graphics module, because the IDCMP events are *)
(* linked to the window. Therefore, some of the structures that should *)
(* be hidden in the ataxxgraphics module are visible so that this module *)
(* can use them. The only procedure visible here is GetEvent. *)
FROM header
IMPORT playertype, movetype, boardrange, boardtype, state,
squaretype, (* Strangely, it's necessary to compile! *)
gameover, pointercode, difficulty, whoisred, whoisblue,
thinkertype;
FROM attacksgraphics
IMPORT mywindowptr, (* Necessary for getting IDCMP events *)
HighlightSquare, UnHighlightSquare, ChangePointer,
DrawBoard, DrawSquare, PrintTurn;
FROM mdgenerallib
IMPORT MyPause;
FROM Ports
IMPORT GetMsg, ReplyMsg, MsgPortPtr, WaitPort, MessagePtr;
FROM Tasks
IMPORT SignalSet, Wait;
FROM SYSTEM
IMPORT ADDRESS, LONGWORD;
FROM Intuition
IMPORT IntuiMessagePtr, SelectDown, SelectUp, SetMenuStrip,
ClearMenuStrip, IDCMPFlagsSet, IDCMPFlags, MENUNUM, ITEMNUM,
MenuItemMutualExcludeSet;
FROM MenuUtil
IMPORT MENUBARPTR, InitMenuBar, ArrangeMenus, AddMenu, AddItem,
DisposeMenuBar;
VAR
mymsgportptr : MsgPortPtr; (* Points to my message port *)
mousex, mousey : INTEGER; (* The coordinates of last IDCMP event *)
mymenuptr : MENUBARPTR; (* For Chris' menu routines *)
editpointerstate : squaretype; (* This tells what the state of the *)
(* pointer is during editing. *)
(**************************************************************************)
PROCEDURE InitMenus;
(* This initializes the menus for the program. Simple. *)
(* *)
(* INPUT *)
(* n/a *)
(* *)
(* OUTPUT *)
(* The menus for the program now should work. *)
(* *)
BEGIN
InitMenuBar(mymenuptr);
AddMenu(mymenuptr, "Project"); (* First menu *)
AddItem(mymenuptr, "New Game ", "N", MenuItemMutualExcludeSet{}, FALSE);
AddItem(mymenuptr, "Edit Board ", "E", MenuItemMutualExcludeSet{}, FALSE);
AddItem(mymenuptr, "About", 0C, MenuItemMutualExcludeSet{}, FALSE);
AddItem(mymenuptr, "Quit ", "Q", MenuItemMutualExcludeSet{}, FALSE);
AddMenu(mymenuptr, "Commands");
AddItem(mymenuptr, "Backup a move ", "B", MenuItemMutualExcludeSet{}, FALSE);
AddItem(mymenuptr, "Redo a move ", "R", MenuItemMutualExcludeSet{}, FALSE);
AddItem(mymenuptr, "Force Computer to move ", "F", MenuItemMutualExcludeSet{}, FALSE);
AddMenu(mymenuptr, "Options"); (* Second menu *)
AddItem(mymenuptr, " Red is Human", 0C, MenuItemMutualExcludeSet{1}, whoisred = human);
AddItem(mymenuptr, " Red is Computer", 0C, MenuItemMutualExcludeSet{0}, whoisred = computer);
AddItem(mymenuptr, " Blue is Human", 0C, MenuItemMutualExcludeSet{3}, whoisblue = human);
AddItem(mymenuptr, " Blue is Computer", 0C, MenuItemMutualExcludeSet{2}, whoisblue = computer);
AddItem(mymenuptr, "", 0C, MenuItemMutualExcludeSet{}, FALSE);
AddItem(mymenuptr, " Tries to Lose", 0C, MenuItemMutualExcludeSet{6,7,8,9}, difficulty = 0);
AddItem(mymenuptr, " Easy", 0C, MenuItemMutualExcludeSet{5,7,8,9}, difficulty = 1);
AddItem(mymenuptr, " Kinda' Good", 0C, MenuItemMutualExcludeSet{5,6,8,9}, difficulty = 2);
AddItem(mymenuptr, " Good", 0C, MenuItemMutualExcludeSet{4,5,7,9}, difficulty = 3);
AddItem(mymenuptr, " Very Good", 0C, MenuItemMutualExcludeSet{5,6,7,8}, difficulty = 4);
ArrangeMenus(mymenuptr);
SetMenuStrip( mywindowptr^, mymenuptr^.FirstMenuPtr^ );
END InitMenus;
(**************************************************************************)
PROCEDURE CloseMenus;
(* This closes and deallocates the memory for the menus. *)
(* *)
(* INPUT *)
(* n/a *)
(* *)
(* OUTPUT *)
(* Kills the menus. *)
(* *)
BEGIN
ClearMenuStrip( mywindowptr^ );
DisposeMenuBar( mymenuptr );
END CloseMenus;
(**************************************************************************)
PROCEDURE ChangeToEditMenu;
(* Clears the current menu and makes the Edit menu. *)
(* *)
(* INPUT *)
(* n/a *)
(* *)
(* OUTPUT *)
(* Remakes the menu bar. *)
BEGIN
CloseMenus;
InitMenuBar(mymenuptr);
AddMenu(mymenuptr, "Project");
AddItem(mymenuptr, "Exit Edit Mode", 0C, MenuItemMutualExcludeSet{}, FALSE);
AddMenu(mymenuptr, "Player");
IF state.turn = red THEN
AddItem(mymenuptr, " Red to move", 0C, MenuItemMutualExcludeSet {1}, TRUE);
AddItem(mymenuptr, " Blue to move", 0C, MenuItemMutualExcludeSet {0}, FALSE);
ELSE
AddItem(mymenuptr, " Red to move", 0C, MenuItemMutualExcludeSet {1}, FALSE);
AddItem(mymenuptr, " Blue to move", 0C, MenuItemMutualExcludeSet {0}, TRUE);
END;
AddMenu(mymenuptr, "Build");
AddItem(mymenuptr, " Empty Space", 0C,
MenuItemMutualExcludeSet{1,2,3}, editpointerstate = empty);
AddItem(mymenuptr, " Block Space", 0C,
MenuItemMutualExcludeSet{0,2,3}, editpointerstate = block);
AddItem(mymenuptr, " Red Player", 0C,
MenuItemMutualExcludeSet{0,1,3}, editpointerstate = red);
AddItem(mymenuptr, " Blue Player", 0C,
MenuItemMutualExcludeSet{0,1,2}, editpointerstate = blue);
AddMenu(mymenuptr, "Major");
AddItem(mymenuptr, "Cancel All", 0C, MenuItemMutualExcludeSet{}, FALSE);
AddItem(mymenuptr, "All Empty", 0C, MenuItemMutualExcludeSet{}, FALSE);
AddItem(mymenuptr, "All Blocks", 0C, MenuItemMutualExcludeSet{}, FALSE);
ArrangeMenus(mymenuptr);
SetMenuStrip( mywindowptr^, mymenuptr^.FirstMenuPtr^ );
END ChangeToEditMenu;
(**************************************************************************)
PROCEDURE ChangeToComputerMenu;
(* Clears the current menu and makes the menu to be displayed during *)
(* the time the computer is moving. *)
(* *)
(* INPUT *)
(* n/a *)
(* *)
(* OUTPUT *)
(* Remakes the menu bar. *)
BEGIN
CloseMenus;
InitMenuBar(mymenuptr);
AddMenu(mymenuptr, "Stop!");
AddItem(mymenuptr, "Abort Computer's Move ", "A", MenuItemMutualExcludeSet{}, FALSE);
ArrangeMenus(mymenuptr);
SetMenuStrip( mywindowptr^, mymenuptr^.FirstMenuPtr^ );
END ChangeToComputerMenu;
(**************************************************************************)
PROCEDURE ChangeToMainMenu;